package com.xu.tools.util;

import com.google.code.kaptcha.Producer;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.util.Properties;

/**
 * @author xuguan
 * @date 2023/2/8
 * @desc 图形验证码
 */
@SuppressWarnings({"SpellCheckingInspection"})
public class KaptchaUtil {

    public static BufferedImage generateKaptcha() {
        Producer producer = getDefaultKaptcha();
        String text = producer.createText();
        return producer.createImage(text);
    }

    public static Producer getDefaultKaptcha() {
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        /**
         * Kaptcha详细配置表
         * 序号	属性名	描述	示例
         * 1	kaptcha.width	验证码宽度	200
         * 2	kaptcha.height	验证码高度	50
         * 3	kaptcha.border.enabled	是否显示边框	false
         * 4	kaptcha.border.color	边框颜色	black
         * 5	kaptcha.border.thickness	边框厚度	2
         * 6	kaptcha.content.length	验证码文本长度	5
         * 7	kaptcha.content.source	文本源	abcde2345678gfynmnpwx
         * 8	kaptcha.content.space	文本间隔	2
         * 9	kaptcha.font.name	字体名称	Arial
         * 10	kaptcha.font.size	字体大小	40
         * 11	kaptcha.font.color	字体颜色	black
         * 12	kaptcha.background-color.from	背景颜色（开始渐变色）	lightGray
         * 13	kaptcha.background-color.to	背景颜色（结束渐变色	white
         */
        // 创建配置对象
        Properties properties = new Properties();
        // 设置边框
        properties.setProperty("kaptcha.border", "yes");
        // 设置颜色
        properties.setProperty("kaptcha.border.color", "105,179,90");
        // 设置字体颜色
        properties.setProperty("kaptcha.textproducer.font.color", "blue");
        // 设置宽度
        properties.setProperty("kaptcha.image.width", "125");
        // 高度
        properties.setProperty("kaptcha.image.height", "50");
        // 设置session.key
        properties.setProperty("kaptcha.session.key", "code");
        // 设置文本长度
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        // 设置字体
        properties.setProperty("kaptcha.textproducer.font.names", "宋体,楷体,微软雅黑");
        // 将以上属性设置为实例一个DefaultKaptcha的属性
        Config config = new Config(properties);
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }

    public static void main(String[] args) throws Exception{
        String projectPath = System.getProperty("user.dir");
        FileOutputStream fos = new FileOutputStream(projectPath + "/src/main/resources/kaptchaImg/kaptcha.jpeg");
        BufferedImage image = generateKaptcha();
        ImageIO.write(image, "jpeg", fos);
    }
}
